using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._ConversionTools._ToGeodatabase
{
    /// <summary>
    /// <para>Raster To Geodatabase</para>
    /// <para>Loads multiple raster datasets into a geodatabase.</para>
    /// <para>将多个栅格数据集加载到地理数据库中。</para>
    /// </summary>    
    [DisplayName("Raster To Geodatabase")]
    public class RasterToGeodatabase : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public RasterToGeodatabase()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_Input_Rasters">
        /// <para>Input Rasters</para>
        /// <para>Input raster dataset(s).</para>
        /// <para>输入栅格数据集。</para>
        /// </param>
        /// <param name="_Output_Geodatabase">
        /// <para>Output Geodatabase</para>
        /// <para>The path and name of a geodatabase.</para>
        /// <para>地理数据库的路径和名称。</para>
        /// </param>
        public RasterToGeodatabase(List<object> _Input_Rasters, object _Output_Geodatabase)
        {
            this._Input_Rasters = _Input_Rasters;
            this._Output_Geodatabase = _Output_Geodatabase;
        }
        public override string ToolboxName => "Conversion Tools";

        public override string ToolName => "Raster To Geodatabase";

        public override string CallName => "conversion.RasterToGeodatabase";

        public override List<string> AcceptEnvironments => ["XYDomain", "ZDomain", "ZResolution", "compression", "configKeyword", "extent", "outputCoordinateSystem", "outputZFlag", "pyramid", "rasterStatistics", "scratchWorkspace", "tileSize", "workspace"];

        public override object[] ParameterInfo => [_Input_Rasters, _Output_Geodatabase, _Configuration_Keyword, _Derived_Geodatabase];

        /// <summary>
        /// <para>Input Rasters</para>
        /// <para>Input raster dataset(s).</para>
        /// <para>输入栅格数据集。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Rasters")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public List<object> _Input_Rasters { get; set; }


        /// <summary>
        /// <para>Output Geodatabase</para>
        /// <para>The path and name of a geodatabase.</para>
        /// <para>地理数据库的路径和名称。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output Geodatabase")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _Output_Geodatabase { get; set; }


        /// <summary>
        /// <para>Configuration Keyword</para>
        /// <para>Specifies the storage parameters (configuration) for a geodatabase. Configuration keywords are set up by your database administrator.</para>
        /// <para>指定地理数据库的存储参数（配置）。配置关键字由数据库管理员设置。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Configuration Keyword")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _Configuration_Keyword { get; set; } = null;


        /// <summary>
        /// <para>Updated Geodatabase</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Updated Geodatabase")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public object _Derived_Geodatabase { get; set; }


        public RasterToGeodatabase SetEnv(object XYDomain = null, object ZDomain = null, object ZResolution = null, object compression = null, object configKeyword = null, object extent = null, object outputCoordinateSystem = null, object outputZFlag = null, object pyramid = null, object rasterStatistics = null, object scratchWorkspace = null, double[] tileSize = null, object workspace = null)
        {
            base.SetEnv(XYDomain: XYDomain, ZDomain: ZDomain, ZResolution: ZResolution, compression: compression, configKeyword: configKeyword, extent: extent, outputCoordinateSystem: outputCoordinateSystem, outputZFlag: outputZFlag, pyramid: pyramid, rasterStatistics: rasterStatistics, scratchWorkspace: scratchWorkspace, tileSize: tileSize, workspace: workspace);
            return this;
        }

    }

}